/**
 * Copyright (C) 2014-2015 LinkedIn Corp. (pinot-core@linkedin.com)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.linkedin.pinot.tools.scan.query;

public class AggregationFuncFactory {
  private static final String COUNT = "COUNT";
  private static final String MIN = "MIN";
  private static final String MAX = "MAX";
  private static final String SUM = "SUM";
  private static final String AVG = "AVG";
  private static final String MINMAXRANGE = "MINMAXRANGE";
  private static final String DISTINCT_COUNT = "DISTINCTCOUNT";

  public static AggregationFunc getAggregationFunc(ResultTable rows, String column, String functionName) {
    switch (functionName.toUpperCase()) {
      case COUNT:
        return new CountFunction(rows, column);

      case MIN:
        return new MinFunction(rows, column);

      case MAX:
        return new MaxFunction(rows, column);

      case SUM:
        return new SumFunction(rows, column);

      case AVG:
        return new AvgFunction(rows, column);

      case MINMAXRANGE:
        return new MinMaxRangeFunction(rows, column);

      case DISTINCT_COUNT:
        return new DistinctCountFunction(rows, column);

      default:
        throw new RuntimeException("Unsupported aggregation function " + functionName);
    }
  }
}
